#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=998244353;
const int NN=205;
int M[NN][NN],res[NN][NN],n,C[NN][NN],a[NN][NN],P[NN],val[2000005];
unsigned long long rd(unsigned long long &x) {
	x^=(x<<13);
	x^=(x>>7);
	x^=(x<<17);
	return x;
}
int fpow(int x,int y) {
	int res=1;
	while (y) {
		if (y&1) res=1ll*res*x%mod;
		x=1ll*x*x%mod; y>>=1;
	}
	return res;
}
void Gauss(int n) {
	for (int i=1; i<=n; i++) {
		int p=-1;
		for (int j=i; j<=n; j++) if (a[j][i]) { p=j; break; }
		if (p==-1) { puts("-1"); return; }
		for (int j=1; j<=n+1; j++) swap(a[i][j],a[p][j]);
		int inv=fpow(a[i][i],mod-2);
		for (int j=1; j<=n+1; j++) a[i][j]=1ll*a[i][j]*inv%mod;
		for (int k=1; k<=n; k++) {
			if (k==i) continue;
			int mul=a[k][i];
			for (int j=1; j<=n+1; j++)
				a[k][j]=(a[k][j]-1ll*mul*a[i][j]%mod+mod)%mod;
		} 
		
		//for (int i=1; i<=n; i++,puts("")) for (int j=1; j<=n; j++) printf("%d ",a[i][j]); 
	}
	for (int i=1; i<=n; i++) printf("%d ",a[i][n+1]); puts("");
}
void mul() {
	for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) C[i][j]=0;
	for (int i=1; i<=n; i++)
		for (int k=1; k<=n; k++) {
			if (!res[i][k]) continue;
			for (int j=1; j<=n; j++)
				C[i][j]=(C[i][j]+1ll*res[i][k]*M[k][j]%mod)%mod;
		}
	for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) res[i][j]=C[i][j];
}

int main() {
	int test,T;
	unsigned long long seed;
	scanf("%d%d%llu",&test,&T,&seed);
	while (T--) {
		int q,x; ll k_max;
		scanf("%d%d%d%lld",&n,&q,&x,&k_max);
		//for (int i=1; i<=n; i++) scanf("%d",&a[i]);
		n=16;
		for (int i=1; i<=n; i++) val[i]=1;
		val[1]=2; val[9]=2;  x=7;
		for (int i=1; i<=n/2; i++) {
			M[i<<1][i]=M[i<<1][n-i+1]=1;
			M[(i<<1)-1][i]=M[(i<<1)-1][n-i+1]=1;
		}
		for (int i=1; i<=n; i++) res[i][i]=1;
		
		for (int i=1; i<=100; i++) {
			mul();
		//	for (int i=1; i<=n; i++,puts("")) 
		//		for (int j=1; j<=n; j++)
		//			printf("%d ",res[i][j]);
		//	puts("--------------------------------");
			int sum=0;
			for (int j=1; j<=n; j++) sum=(sum+1ll*res[x][j]*val[j]%mod)%mod;
			P[i]=sum;
		}
		int m=2;
		for (int i=1; i<=m; i++) {
			a[i][m+1]=P[i+m];
			for (int j=1; j<=m; j++) a[i][j]=P[i+j-1];
		}
		//for (int i=1; i<=n; i++,puts("")) for (int j=1; j<=n; j++) printf("%d ",a[i][j]); 
		Gauss(m);
		
		for (int i=1; i<=q; i++) {
			long long k=rd(seed)%k_max;
			
		}
	}
}
